{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time, sys\n",
    "\n",
    "# Import the Qiskit \n",
    "from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, QiskitError\n",
    "from qiskit import execute, IBMQ, BasicAer, transpiler, Aer\n",
    "from qiskit.providers.ibmq import least_busy\n",
    "from qiskit.tools.monitor import job_monitor\n",
    "from qiskit.mapper import Layout\n",
    "\n",
    "import numpy as np\n",
    "import qiskit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define your backend"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Remote backend \"ibmqx_qasm_simulator\" could not be instantiated due to an invalid config: {'memory': ['Missing data for required field.'], 'backend_version': ['Missing data for required field.'], 'backend_name': ['Missing data for required field.'], 'open_pulse': ['Missing data for required field.'], 'basis_gates': ['Missing data for required field.'], 'local': ['Missing data for required field.'], 'gates': {0: {'parameters': ['Missing data for required field.'], 'name': ['Missing data for required field.'], 'qasm_def': ['Missing data for required field.']}}, 'n_qubits': ['Missing data for required field.'], 'conditional': ['Missing data for required field.'], 'max_shots': ['Missing data for required field.']}\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Available backends:\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<IBMQSimulator('ibmq_qasm_simulator') from IBMQ(ibm-q-ornl, bes-qis, argonne)>,\n",
       " <IBMQBackend('ibmq_20_tokyo') from IBMQ(ibm-q-ornl, bes-qis, argonne)>,\n",
       " <IBMQBackend('ibmq_poughkeepsie') from IBMQ(ibm-q-ornl, bes-qis, argonne)>]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from qiskit import IBMQ\n",
    "\n",
    "# insert your token & URL here\n",
    "IBMQ.enable_account('<token>',\n",
    "                    url='<url>')\n",
    "\n",
    "# check available backends\n",
    "print(\"Available backends:\")\n",
    "IBMQ.backends()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the layout"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ibmq_20_tokyo\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "BackendStatus(backend_name='ibmq_20_tokyo', backend_version='1.2.6', operational=True, pending_jobs=0, status_msg='active')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# execute on the IBM Tokyo 20 Qubit Machine\n",
    "#backend = IBMQ.get_backend('ibmq_qasm_simulator')\n",
    "backend = IBMQ.get_backend('ibmq_20_tokyo')\n",
    "print(backend)\n",
    "backend.status()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the UCCSD ansatz circuit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "def get_ucc_ansatz(theta):\n",
    "    circuit = QuantumCircuit(2, 2)\n",
    "    circuit.x(0)\n",
    "    circuit.ry(theta, 1)\n",
    "    circuit.cx(1, 0)\n",
    "    return circuit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the naive measurement circuits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "shots1 = 25\n",
    "\n",
    "def measure_zi_simple(theta, ZI_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    ZI_job_IDs.append(job.job_id())\n",
    "    \n",
    "def measure_iz_simple(theta, IZ_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    IZ_job_IDs.append(job.job_id())\n",
    "    \n",
    "def measure_xx_simple(theta, XX_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.h(0)\n",
    "    circuit.h(1)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    XX_job_IDs.append(job.job_id())\n",
    "\n",
    "def measure_yy_simple(theta, YY_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.h(0)\n",
    "    circuit.sdg(0)\n",
    "    circuit.h(1)\n",
    "    circuit.sdg(1)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots1)\n",
    "    print(job.job_id())\n",
    "    YY_job_IDs.append(job.job_id())\n",
    "\n",
    "def measure_hamiltonian_simple(theta, ZI_job_IDs, IZ_job_IDs, XX_job_IDs, YY_job_IDs):\n",
    "    measure_zi_simple(theta, ZI_job_IDs)\n",
    "    measure_iz_simple(theta, IZ_job_IDs)\n",
    "    measure_xx_simple(theta, XX_job_IDs)\n",
    "    measure_yy_simple(theta, YY_job_IDs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define the simultaneous measurement circuits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "shots2 = 50\n",
    "\n",
    "def measure_zi_and_iz(theta, ZI_and_IZ_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots2)\n",
    "    print(job.job_id())\n",
    "    ZI_and_IZ_job_IDs.append(job.job_id())\n",
    "    \n",
    "def measure_xx_and_yy(theta, XX_and_YY_job_IDs):\n",
    "    circuit = get_ucc_ansatz(theta)\n",
    "    circuit.cx(0, 1)\n",
    "    circuit.h(0)\n",
    "    circuit.measure(0, 0)\n",
    "    circuit.measure(1, 1)\n",
    "    job = qiskit.execute(circuit, backend=backend, shots=shots2)\n",
    "    print(job.job_id())\n",
    "    XX_and_YY_job_IDs.append(job.job_id())\n",
    "\n",
    "def measure_simultaneously_hamiltonian_simple(theta, ZI_and_IZ_job_IDs, XX_and_YY_job_IDs):\n",
    "    measure_zi_and_iz(theta, ZI_and_IZ_job_IDs)\n",
    "    measure_xx_and_yy(theta, XX_and_YY_job_IDs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Submit the job to Qiskit and get the job IDs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-3.141592653589793\n",
      "5d3b6e7b9bb742001ac32d8c\n",
      "5d3b6e7f6c947600181bb414\n",
      "5d3b6e84f8ffa90019ad2c42\n",
      "5d3b6e88b61d040018076b2d\n",
      "5d3b6e8db61d040018076b2f\n",
      "5d3b6e91b61d040018076b31\n",
      "-2.8797932657906435\n",
      "5d3b6e956c947600181bb416\n",
      "5d3b6e9a5e9f6500181e74da\n",
      "5d3b6e9eb61d040018076b33\n",
      "5d3b6ea1a06411001849a8de\n",
      "5d3b6ea6f22d1200183f9f21\n",
      "5d3b6eaaf22d1200183f9f23\n",
      "-2.617993877991494\n",
      "5d3b6eae5e9f6500181e74dc\n",
      "5d3b6eb2b411ea00186e46b9\n",
      "5d3b6eb6a06411001849a8e0\n",
      "5d3b6ebaa06411001849a8e2\n",
      "5d3b6ebfb61d040018076b35\n",
      "5d3b6ec3f22d1200183f9f25\n",
      "-2.3561944901923444\n",
      "5d3b6ec7f22d1200183f9f27\n",
      "5d3b6ecb5e9f6500181e74de\n",
      "5d3b6ecfb411ea00186e46bb\n",
      "5d3b6ed3b411ea00186e46bd\n",
      "5d3b6ed7b411ea00186e46bf\n",
      "5d3b6edb9bb742001ac32d8e\n",
      "-2.094395102393195\n",
      "5d3b6edffb29900018d5fadf\n",
      "5d3b6ee35e9f6500181e74e0\n",
      "5d3b6ee7f8ffa90019ad2c44\n",
      "5d3b6eebb61d040018076b37\n",
      "5d3b6eeff8ffa90019ad2c46\n",
      "5d3b6ef4a06411001849a8e4\n",
      "-1.8325957145940452\n",
      "5d3b6ef8b61d040018076b39\n",
      "5d3b6efc4610b6001873fefe\n",
      "5d3b6f015e9f6500181e74e2\n",
      "5d3b6f05a06411001849a8e6\n",
      "5d3b6f09fb29900018d5fae4\n",
      "5d3b6f0dfb29900018d5fae6\n",
      "-1.5707963267948957\n",
      "5d3b6f12fb29900018d5fae8\n",
      "5d3b6f16b61d040018076b3b\n",
      "5d3b6f1ab61d040018076b3d\n",
      "5d3b6f1e5e9f6500181e74e7\n",
      "5d3b6f22f8ffa90019ad2c49\n",
      "5d3b6f26a06411001849a8eb\n",
      "-1.308996938995746\n",
      "5d3b6f2a9bb742001ac32d91\n",
      "5d3b6f2eb411ea00186e46c4\n",
      "5d3b6f32b411ea00186e46c6\n",
      "5d3b6f365e9f6500181e74e9\n",
      "5d3b6f3ab411ea00186e46c8\n",
      "5d3b6f3e4610b6001873ff00\n",
      "-1.0471975511965965\n",
      "5d3b6f42b411ea00186e46ca\n",
      "5d3b6f46b411ea00186e46cc\n",
      "5d3b6f4bfb29900018d5faea\n",
      "5d3b6f4ff8ffa90019ad2c4b\n",
      "5d3b6f539bb742001ac32d93\n",
      "5d3b6f57b411ea00186e46ce\n",
      "-0.785398163397447\n",
      "5d3b6f5aa06411001849a8ed\n",
      "5d3b6f5f6c947600181bb419\n",
      "5d3b6f636c947600181bb41b\n",
      "5d3b6f67b411ea00186e46d0\n",
      "5d3b6f6bb411ea00186e46d2\n",
      "5d3b6f6ffb29900018d5faec\n",
      "-0.5235987755982974\n",
      "5d3b6f73fb29900018d5faee\n",
      "5d3b6f77f22d1200183f9f2a\n",
      "5d3b6f7ca06411001849a8ef\n",
      "5d3b6f80fb29900018d5faf0\n",
      "5d3b6f84fb29900018d5faf2\n",
      "5d3b6f884610b6001873ff02\n",
      "-0.2617993877991478\n",
      "5d3b6f8c9bb742001ac32d95\n",
      "5d3b6f909bb742001ac32d97\n",
      "5d3b6f94fb29900018d5faf4\n",
      "5d3b6f994610b6001873ff04\n",
      "5d3b6f9c5e9f6500181e74eb\n",
      "5d3b6fa14610b6001873ff06\n",
      "1.7763568394002505e-15\n",
      "5d3b6fa5b411ea00186e46d4\n",
      "5d3b6fa95e9f6500181e74ed\n",
      "5d3b6fadf8ffa90019ad2c4d\n",
      "5d3b6fb2f8ffa90019ad2c4f\n",
      "5d3b6fb65e9f6500181e74ef\n",
      "5d3b6fba6c947600181bb41d\n",
      "0.26179938779915135\n",
      "5d3b6fbe5e9f6500181e74f1\n",
      "5d3b6fc3a06411001849a8f1\n",
      "5d3b6fc75e9f6500181e74f3\n",
      "5d3b6fcb5e9f6500181e74f5\n",
      "5d3b6fcff8ffa90019ad2c51\n",
      "5d3b6fd5a06411001849a8f3\n",
      "0.5235987755983009\n",
      "5d3b6fda6c947600181bb41f\n",
      "5d3b6fde9bb742001ac32d99\n",
      "5d3b6fe3a06411001849a8f5\n",
      "5d3b6fe8b61d040018076b3f\n",
      "5d3b6fecfb29900018d5faf6\n",
      "5d3b6ff15e9f6500181e74f7\n",
      "0.7853981633974505\n",
      "5d3b6ff59bb742001ac32d9b\n",
      "5d3b6ffaf22d1200183f9f2c\n",
      "5d3b6ffe5e9f6500181e74f9\n",
      "5d3b70025e9f6500181e74fb\n",
      "5d3b7007b61d040018076b41\n",
      "5d3b700b4610b6001873ff08\n",
      "1.0471975511966\n",
      "5d3b70104610b6001873ff0a\n",
      "5d3b7015b61d040018076b43\n",
      "5d3b70195e9f6500181e74fd\n",
      "5d3b701f5e9f6500181e74ff\n",
      "5d3b70236c947600181bb421\n",
      "5d3b70285e9f6500181e7501\n",
      "1.3089969389957492\n",
      "5d3b702c4610b6001873ff0c\n",
      "5d3b70316c947600181bb423\n",
      "5d3b7036a06411001849a8f7\n",
      "5d3b703bfb29900018d5faf8\n",
      "5d3b703ff8ffa90019ad2c53\n",
      "5d3b7044b411ea00186e46d6\n",
      "1.5707963267948992\n",
      "5d3b70495e9f6500181e7503\n",
      "5d3b704d5e9f6500181e7505\n",
      "5d3b7052f8ffa90019ad2c55\n",
      "5d3b70575e9f6500181e7507\n",
      "5d3b705b4610b6001873ff0e\n",
      "5d3b7061f22d1200183f9f2e\n",
      "1.8325957145940492\n",
      "5d3b70664610b6001873ff10\n",
      "5d3b706b9bb742001ac32d9d\n",
      "5d3b706ff8ffa90019ad2c57\n",
      "5d3b7074a06411001849a8f9\n",
      "5d3b70785e9f6500181e7509\n",
      "5d3b707c5e9f6500181e750b\n",
      "2.0943951023931984\n",
      "5d3b70804610b6001873ff12\n",
      "5d3b70855e9f6500181e750d\n",
      "5d3b70896c947600181bb425\n",
      "5d3b708e5e9f6500181e750f\n",
      "5d3b70929bb742001ac32d9f\n",
      "5d3b7096a06411001849a8fb\n",
      "2.3561944901923475\n",
      "5d3b709af22d1200183f9f30\n",
      "5d3b709e4610b6001873ff14\n",
      "5d3b70a25e9f6500181e7511\n",
      "5d3b70a7f22d1200183f9f32\n",
      "5d3b70ab5e9f6500181e7513\n",
      "5d3b70aff8ffa90019ad2c59\n",
      "2.6179938779914975\n",
      "5d3b70b3fb29900018d5fafa\n",
      "5d3b70b7b411ea00186e46d8\n",
      "5d3b70bbf8ffa90019ad2c5b\n",
      "5d3b70c04610b6001873ff16\n",
      "5d3b70c49bb742001ac32da1\n",
      "5d3b70c8f22d1200183f9f34\n",
      "2.8797932657906475\n",
      "5d3b70ccb411ea00186e46da\n",
      "5d3b70d1b411ea00186e46dc\n",
      "5d3b70d5f22d1200183f9f36\n",
      "5d3b70d9fb29900018d5fafc\n",
      "5d3b70ddf8ffa90019ad2c5d\n",
      "5d3b70e2f8ffa90019ad2c5f\n",
      "Done!\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import qiskit\n",
    "\n",
    "ZI_job_IDs = []\n",
    "IZ_job_IDs = []\n",
    "XX_job_IDs = []\n",
    "YY_job_IDs = []\n",
    "\n",
    "ZI_and_IZ_job_IDs = []\n",
    "XX_and_YY_job_IDs = []\n",
    "\n",
    "theta_values = []\n",
    "\n",
    "for theta in np.arange(-np.pi, np.pi, np.pi / 12):\n",
    "    print(theta)\n",
    "    measure_hamiltonian_simple(theta, ZI_job_IDs, IZ_job_IDs, XX_job_IDs, YY_job_IDs)\n",
    "    measure_simultaneously_hamiltonian_simple(theta, ZI_and_IZ_job_IDs, XX_and_YY_job_IDs)\n",
    "    theta_values.append(theta)\n",
    "print('Done!')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# push job IDs to list for easier processing\n",
    "you will need to do this before closing the computer to make your life easier later on :)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ZI_job_IDs is = \n",
      "['5d3b6e7b9bb742001ac32d8c', '5d3b6e956c947600181bb416', '5d3b6eae5e9f6500181e74dc', '5d3b6ec7f22d1200183f9f27', '5d3b6edffb29900018d5fadf', '5d3b6ef8b61d040018076b39', '5d3b6f12fb29900018d5fae8', '5d3b6f2a9bb742001ac32d91', '5d3b6f42b411ea00186e46ca', '5d3b6f5aa06411001849a8ed', '5d3b6f73fb29900018d5faee', '5d3b6f8c9bb742001ac32d95', '5d3b6fa5b411ea00186e46d4', '5d3b6fbe5e9f6500181e74f1', '5d3b6fda6c947600181bb41f', '5d3b6ff59bb742001ac32d9b', '5d3b70104610b6001873ff0a', '5d3b702c4610b6001873ff0c', '5d3b70495e9f6500181e7503', '5d3b70664610b6001873ff10', '5d3b70804610b6001873ff12', '5d3b709af22d1200183f9f30', '5d3b70b3fb29900018d5fafa', '5d3b70ccb411ea00186e46da']\n",
      "\n",
      "IZ_job_IDs is = \n",
      "['5d3b6e7f6c947600181bb414', '5d3b6e9a5e9f6500181e74da', '5d3b6eb2b411ea00186e46b9', '5d3b6ecb5e9f6500181e74de', '5d3b6ee35e9f6500181e74e0', '5d3b6efc4610b6001873fefe', '5d3b6f16b61d040018076b3b', '5d3b6f2eb411ea00186e46c4', '5d3b6f46b411ea00186e46cc', '5d3b6f5f6c947600181bb419', '5d3b6f77f22d1200183f9f2a', '5d3b6f909bb742001ac32d97', '5d3b6fa95e9f6500181e74ed', '5d3b6fc3a06411001849a8f1', '5d3b6fde9bb742001ac32d99', '5d3b6ffaf22d1200183f9f2c', '5d3b7015b61d040018076b43', '5d3b70316c947600181bb423', '5d3b704d5e9f6500181e7505', '5d3b706b9bb742001ac32d9d', '5d3b70855e9f6500181e750d', '5d3b709e4610b6001873ff14', '5d3b70b7b411ea00186e46d8', '5d3b70d1b411ea00186e46dc']\n",
      "\n",
      "XX_job_IDs is = \n",
      "['5d3b6e84f8ffa90019ad2c42', '5d3b6e9eb61d040018076b33', '5d3b6eb6a06411001849a8e0', '5d3b6ecfb411ea00186e46bb', '5d3b6ee7f8ffa90019ad2c44', '5d3b6f015e9f6500181e74e2', '5d3b6f1ab61d040018076b3d', '5d3b6f32b411ea00186e46c6', '5d3b6f4bfb29900018d5faea', '5d3b6f636c947600181bb41b', '5d3b6f7ca06411001849a8ef', '5d3b6f94fb29900018d5faf4', '5d3b6fadf8ffa90019ad2c4d', '5d3b6fc75e9f6500181e74f3', '5d3b6fe3a06411001849a8f5', '5d3b6ffe5e9f6500181e74f9', '5d3b70195e9f6500181e74fd', '5d3b7036a06411001849a8f7', '5d3b7052f8ffa90019ad2c55', '5d3b706ff8ffa90019ad2c57', '5d3b70896c947600181bb425', '5d3b70a25e9f6500181e7511', '5d3b70bbf8ffa90019ad2c5b', '5d3b70d5f22d1200183f9f36']\n",
      "\n",
      "YY_job_IDs = \n",
      "['5d3b6e88b61d040018076b2d', '5d3b6ea1a06411001849a8de', '5d3b6ebaa06411001849a8e2', '5d3b6ed3b411ea00186e46bd', '5d3b6eebb61d040018076b37', '5d3b6f05a06411001849a8e6', '5d3b6f1e5e9f6500181e74e7', '5d3b6f365e9f6500181e74e9', '5d3b6f4ff8ffa90019ad2c4b', '5d3b6f67b411ea00186e46d0', '5d3b6f80fb29900018d5faf0', '5d3b6f994610b6001873ff04', '5d3b6fb2f8ffa90019ad2c4f', '5d3b6fcb5e9f6500181e74f5', '5d3b6fe8b61d040018076b3f', '5d3b70025e9f6500181e74fb', '5d3b701f5e9f6500181e74ff', '5d3b703bfb29900018d5faf8', '5d3b70575e9f6500181e7507', '5d3b7074a06411001849a8f9', '5d3b708e5e9f6500181e750f', '5d3b70a7f22d1200183f9f32', '5d3b70c04610b6001873ff16', '5d3b70d9fb29900018d5fafc']\n",
      "\n",
      "ZI_and_IZ_job_IDs = \n",
      "['5d3b6e8db61d040018076b2f', '5d3b6ea6f22d1200183f9f21', '5d3b6ebfb61d040018076b35', '5d3b6ed7b411ea00186e46bf', '5d3b6eeff8ffa90019ad2c46', '5d3b6f09fb29900018d5fae4', '5d3b6f22f8ffa90019ad2c49', '5d3b6f3ab411ea00186e46c8', '5d3b6f539bb742001ac32d93', '5d3b6f6bb411ea00186e46d2', '5d3b6f84fb29900018d5faf2', '5d3b6f9c5e9f6500181e74eb', '5d3b6fb65e9f6500181e74ef', '5d3b6fcff8ffa90019ad2c51', '5d3b6fecfb29900018d5faf6', '5d3b7007b61d040018076b41', '5d3b70236c947600181bb421', '5d3b703ff8ffa90019ad2c53', '5d3b705b4610b6001873ff0e', '5d3b70785e9f6500181e7509', '5d3b70929bb742001ac32d9f', '5d3b70ab5e9f6500181e7513', '5d3b70c49bb742001ac32da1', '5d3b70ddf8ffa90019ad2c5d']\n",
      "\n",
      "XX_and_YY_job_IDs = :\n",
      "['5d3b6e91b61d040018076b31', '5d3b6eaaf22d1200183f9f23', '5d3b6ec3f22d1200183f9f25', '5d3b6edb9bb742001ac32d8e', '5d3b6ef4a06411001849a8e4', '5d3b6f0dfb29900018d5fae6', '5d3b6f26a06411001849a8eb', '5d3b6f3e4610b6001873ff00', '5d3b6f57b411ea00186e46ce', '5d3b6f6ffb29900018d5faec', '5d3b6f884610b6001873ff02', '5d3b6fa14610b6001873ff06', '5d3b6fba6c947600181bb41d', '5d3b6fd5a06411001849a8f3', '5d3b6ff15e9f6500181e74f7', '5d3b700b4610b6001873ff08', '5d3b70285e9f6500181e7501', '5d3b7044b411ea00186e46d6', '5d3b7061f22d1200183f9f2e', '5d3b707c5e9f6500181e750b', '5d3b7096a06411001849a8fb', '5d3b70aff8ffa90019ad2c59', '5d3b70c8f22d1200183f9f34', '5d3b70e2f8ffa90019ad2c5f']\n",
      "\n",
      "theta_values = \n",
      "[-3.141592653589793, -2.8797932657906435, -2.617993877991494, -2.3561944901923444, -2.094395102393195, -1.8325957145940452, -1.5707963267948957, -1.308996938995746, -1.0471975511965965, -0.785398163397447, -0.5235987755982974, -0.2617993877991478, 1.7763568394002505e-15, 0.26179938779915135, 0.5235987755983009, 0.7853981633974505, 1.0471975511966, 1.3089969389957492, 1.5707963267948992, 1.8325957145940492, 2.0943951023931984, 2.3561944901923475, 2.6179938779914975, 2.8797932657906475]\n"
     ]
    }
   ],
   "source": [
    "print('ZI_job_IDs = ')\n",
    "print(ZI_job_IDs)\n",
    "print()\n",
    "\n",
    "print('IZ_job_IDs = ')\n",
    "print(IZ_job_IDs)\n",
    "print()\n",
    "\n",
    "print('XX_job_IDs = ')\n",
    "print(XX_job_IDs)\n",
    "print()\n",
    "\n",
    "print('YY_job_IDs = ')\n",
    "print(YY_job_IDs)\n",
    "print()\n",
    "\n",
    "print('ZI_and_IZ_job_IDs = ')\n",
    "print(ZI_and_IZ_job_IDs)\n",
    "print()\n",
    "\n",
    "print('XX_and_YY_job_IDs = ')\n",
    "print(XX_and_YY_job_IDs)\n",
    "print()\n",
    "\n",
    "print('theta_values = ')\n",
    "print(theta_values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### (Check the status of the specific job)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<JobStatus.DONE: 'job has successfully run'>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "backend.retrieve_job('').status()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Retyping the job IDs\n",
    "just copy and paste from the print statement results in the previous block"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "ZI_job_IDs = ['5d3b6e7b9bb742001ac32d8c', '5d3b6e956c947600181bb416', '5d3b6eae5e9f6500181e74dc', '5d3b6ec7f22d1200183f9f27', '5d3b6edffb29900018d5fadf', '5d3b6ef8b61d040018076b39', '5d3b6f12fb29900018d5fae8', '5d3b6f2a9bb742001ac32d91', '5d3b6f42b411ea00186e46ca', '5d3b6f5aa06411001849a8ed', '5d3b6f73fb29900018d5faee', '5d3b6f8c9bb742001ac32d95', '5d3b6fa5b411ea00186e46d4', '5d3b6fbe5e9f6500181e74f1', '5d3b6fda6c947600181bb41f', '5d3b6ff59bb742001ac32d9b', '5d3b70104610b6001873ff0a', '5d3b702c4610b6001873ff0c', '5d3b70495e9f6500181e7503', '5d3b70664610b6001873ff10', '5d3b70804610b6001873ff12', '5d3b709af22d1200183f9f30', '5d3b70b3fb29900018d5fafa', '5d3b70ccb411ea00186e46da']\n",
    "\n",
    "IZ_job_IDs = ['5d3b6e7f6c947600181bb414', '5d3b6e9a5e9f6500181e74da', '5d3b6eb2b411ea00186e46b9', '5d3b6ecb5e9f6500181e74de', '5d3b6ee35e9f6500181e74e0', '5d3b6efc4610b6001873fefe', '5d3b6f16b61d040018076b3b', '5d3b6f2eb411ea00186e46c4', '5d3b6f46b411ea00186e46cc', '5d3b6f5f6c947600181bb419', '5d3b6f77f22d1200183f9f2a', '5d3b6f909bb742001ac32d97', '5d3b6fa95e9f6500181e74ed', '5d3b6fc3a06411001849a8f1', '5d3b6fde9bb742001ac32d99', '5d3b6ffaf22d1200183f9f2c', '5d3b7015b61d040018076b43', '5d3b70316c947600181bb423', '5d3b704d5e9f6500181e7505', '5d3b706b9bb742001ac32d9d', '5d3b70855e9f6500181e750d', '5d3b709e4610b6001873ff14', '5d3b70b7b411ea00186e46d8', '5d3b70d1b411ea00186e46dc']\n",
    "\n",
    "XX_job_IDs = ['5d3b6e84f8ffa90019ad2c42', '5d3b6e9eb61d040018076b33', '5d3b6eb6a06411001849a8e0', '5d3b6ecfb411ea00186e46bb', '5d3b6ee7f8ffa90019ad2c44', '5d3b6f015e9f6500181e74e2', '5d3b6f1ab61d040018076b3d', '5d3b6f32b411ea00186e46c6', '5d3b6f4bfb29900018d5faea', '5d3b6f636c947600181bb41b', '5d3b6f7ca06411001849a8ef', '5d3b6f94fb29900018d5faf4', '5d3b6fadf8ffa90019ad2c4d', '5d3b6fc75e9f6500181e74f3', '5d3b6fe3a06411001849a8f5', '5d3b6ffe5e9f6500181e74f9', '5d3b70195e9f6500181e74fd', '5d3b7036a06411001849a8f7', '5d3b7052f8ffa90019ad2c55', '5d3b706ff8ffa90019ad2c57', '5d3b70896c947600181bb425', '5d3b70a25e9f6500181e7511', '5d3b70bbf8ffa90019ad2c5b', '5d3b70d5f22d1200183f9f36']\n",
    "\n",
    "YY_job_IDs = ['5d3b6e88b61d040018076b2d', '5d3b6ea1a06411001849a8de', '5d3b6ebaa06411001849a8e2', '5d3b6ed3b411ea00186e46bd', '5d3b6eebb61d040018076b37', '5d3b6f05a06411001849a8e6', '5d3b6f1e5e9f6500181e74e7', '5d3b6f365e9f6500181e74e9', '5d3b6f4ff8ffa90019ad2c4b', '5d3b6f67b411ea00186e46d0', '5d3b6f80fb29900018d5faf0', '5d3b6f994610b6001873ff04', '5d3b6fb2f8ffa90019ad2c4f', '5d3b6fcb5e9f6500181e74f5', '5d3b6fe8b61d040018076b3f', '5d3b70025e9f6500181e74fb', '5d3b701f5e9f6500181e74ff', '5d3b703bfb29900018d5faf8', '5d3b70575e9f6500181e7507', '5d3b7074a06411001849a8f9', '5d3b708e5e9f6500181e750f', '5d3b70a7f22d1200183f9f32', '5d3b70c04610b6001873ff16', '5d3b70d9fb29900018d5fafc']\n",
    "\n",
    "ZI_and_IZ_job_IDs = ['5d3b6e8db61d040018076b2f', '5d3b6ea6f22d1200183f9f21', '5d3b6ebfb61d040018076b35', '5d3b6ed7b411ea00186e46bf', '5d3b6eeff8ffa90019ad2c46', '5d3b6f09fb29900018d5fae4', '5d3b6f22f8ffa90019ad2c49', '5d3b6f3ab411ea00186e46c8', '5d3b6f539bb742001ac32d93', '5d3b6f6bb411ea00186e46d2', '5d3b6f84fb29900018d5faf2', '5d3b6f9c5e9f6500181e74eb', '5d3b6fb65e9f6500181e74ef', '5d3b6fcff8ffa90019ad2c51', '5d3b6fecfb29900018d5faf6', '5d3b7007b61d040018076b41', '5d3b70236c947600181bb421', '5d3b703ff8ffa90019ad2c53', '5d3b705b4610b6001873ff0e', '5d3b70785e9f6500181e7509', '5d3b70929bb742001ac32d9f', '5d3b70ab5e9f6500181e7513', '5d3b70c49bb742001ac32da1', '5d3b70ddf8ffa90019ad2c5d']\n",
    "\n",
    "XX_and_YY_job_IDs =['5d3b6e91b61d040018076b31', '5d3b6eaaf22d1200183f9f23', '5d3b6ec3f22d1200183f9f25', '5d3b6edb9bb742001ac32d8e', '5d3b6ef4a06411001849a8e4', '5d3b6f0dfb29900018d5fae6', '5d3b6f26a06411001849a8eb', '5d3b6f3e4610b6001873ff00', '5d3b6f57b411ea00186e46ce', '5d3b6f6ffb29900018d5faec', '5d3b6f884610b6001873ff02', '5d3b6fa14610b6001873ff06', '5d3b6fba6c947600181bb41d', '5d3b6fd5a06411001849a8f3', '5d3b6ff15e9f6500181e74f7', '5d3b700b4610b6001873ff08', '5d3b70285e9f6500181e7501', '5d3b7044b411ea00186e46d6', '5d3b7061f22d1200183f9f2e', '5d3b707c5e9f6500181e750b', '5d3b7096a06411001849a8fb', '5d3b70aff8ffa90019ad2c59', '5d3b70c8f22d1200183f9f34', '5d3b70e2f8ffa90019ad2c5f']\n",
    "\n",
    "theta_values = [-3.141592653589793, -2.8797932657906435, -2.617993877991494, -2.3561944901923444, -2.094395102393195, -1.8325957145940452, -1.5707963267948957, -1.308996938995746, -1.0471975511965965, -0.785398163397447, -0.5235987755982974, -0.2617993877991478, 1.7763568394002505e-15, 0.26179938779915135, 0.5235987755983009, 0.7853981633974505, 1.0471975511966, 1.3089969389957492, 1.5707963267948992, 1.8325957145940492, 2.0943951023931984, 2.3561944901923475, 2.6179938779914975, 2.8797932657906475]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Retrieve the job results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### compute the energy sums for naive measurement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.8904\n",
      "11.919200000000002\n",
      "12.108\n",
      "11.8408\n",
      "12.2776\n",
      "12.052\n",
      "8.130400000000002\n",
      "8.8728\n",
      "4.068000000000001\n",
      "4.94\n",
      "3.1688\n",
      "0.9672000000000008\n",
      "0.11120000000000085\n",
      "-0.22160000000000002\n",
      "-0.725599999999999\n",
      "-0.01519999999999988\n",
      "-0.04079999999999995\n",
      "0.2280000000000002\n",
      "2.0696000000000003\n",
      "4.58\n",
      "4.839200000000001\n",
      "6.2008\n",
      "9.1976\n",
      "10.4984\n"
     ]
    }
   ],
   "source": [
    "#backend = IBMQ.get_backend('')\n",
    "shots1 = 25\n",
    "final_result_naive = []\n",
    "for i in range (len(theta_values)):\n",
    "    \n",
    "    zi_counts = backend.retrieve_job(ZI_job_IDs[i]).result().get_counts()\n",
    "    zi_contribution = (zi_counts.get('00', 0) + zi_counts.get('10', 0) \n",
    "                       - zi_counts.get('11', 0) - zi_counts.get('01', 0)) / shots1\n",
    "    #print(zi_counts)\n",
    "    #print(zi_counts.get('10', 0))\n",
    "    #print(zi_contribution)\n",
    "    \n",
    "    iz_counts = backend.retrieve_job(IZ_job_IDs[i]).result().get_counts()\n",
    "    iz_contribution = (iz_counts.get('00', 0) + iz_counts.get('01', 0) \n",
    "                       - iz_counts.get('10', 0) - iz_counts.get('11', 0)) / shots1\n",
    "    \n",
    "    xx_counts = backend.retrieve_job(XX_job_IDs[i]).result().get_counts()\n",
    "    xx_contribution = (xx_counts.get('00', 0) + xx_counts.get('11', 0) \n",
    "                       - xx_counts.get('01', 0) - xx_counts.get('10', 0)) / shots1\n",
    "    \n",
    "    yy_counts = backend.retrieve_job(YY_job_IDs[i]).result().get_counts()\n",
    "    yy_contribution = (yy_counts.get('00', 0) + yy_counts.get('11', 0) \n",
    "                       - yy_counts.get('01', 0) - yy_counts.get('10', 0)) / shots1\n",
    "    \n",
    "    total = 5.9 + .22 * zi_contribution - 6.1 * iz_contribution - 2.14 * xx_contribution - 2.14 * yy_contribution\n",
    "    final_result_naive.append(total)\n",
    "    print(total)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_result_naive = [9.8904,11.919200000000002,12.108,11.8408,12.2776,12.052,8.130400000000002,8.8728,4.068000000000001,4.94,3.1688,0.9672000000000008,0.11120000000000085,-0.22160000000000002,-0.725599999999999,-0.01519999999999988,-0.04079999999999995,0.2280000000000002,2.0696000000000003,4.58,4.839200000000001,6.2008,9.1976,10.4984]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### compute the energy sums for simultaneous measurement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11.789312\n",
      "12.531039999999999\n",
      "13.686624000000002\n",
      "12.950975999999999\n",
      "10.417824000000001\n",
      "10.646688\n",
      "9.495584\n",
      "7.283488000000001\n",
      "5.736288000000002\n",
      "2.7667200000000007\n",
      "2.9448640000000004\n",
      "1.6948800000000006\n",
      "-0.8939839999999992\n",
      "-0.5684799999999993\n",
      "0.03478400000000048\n",
      "-0.7553599999999996\n",
      "0.06156800000000029\n",
      "0.3689600000000004\n",
      "1.9888\n",
      "4.571999999999999\n",
      "3.818656\n",
      "7.474719999999999\n",
      "9.504640000000002\n",
      "9.734688\n"
     ]
    }
   ],
   "source": [
    "#backend = IBMQ.get_backend('ibmq_qasm_simulator')\n",
    "shots2 = 50\n",
    "\n",
    "final_result_simultaneous = []\n",
    "for i in range (len(theta_values)):\n",
    "    zi_and_iz_counts = backend.retrieve_job(ZI_and_IZ_job_IDs[i]).result().get_counts()\n",
    "    zi_contribution = (zi_and_iz_counts.get('00', 0) + zi_and_iz_counts.get('10', 0) \n",
    "                       - zi_and_iz_counts.get('11', 0) - zi_and_iz_counts.get('01', 0)) / shots2\n",
    "    iz_contribution = (zi_and_iz_counts.get('00', 0) + zi_and_iz_counts.get('01', 0) \n",
    "                       - zi_and_iz_counts.get('10', 0) - zi_and_iz_counts.get('11', 0)) / shots2\n",
    "    #print(zi_and_iz_counts)\n",
    "    xx_and_yy_counts = backend.retrieve_job(XX_and_YY_job_IDs[i]).result().get_counts()\n",
    "    xx_contribution = (xx_and_yy_counts.get('00', 0) + xx_and_yy_counts.get('10', 0) \n",
    "                       - xx_and_yy_counts.get('11', 0) - xx_and_yy_counts.get('01', 0)) / shots2\n",
    "    zz_contribution = (xx_and_yy_counts.get('00', 0) + xx_and_yy_counts.get('01', 0) \n",
    "                       - xx_and_yy_counts.get('10', 0) - xx_and_yy_counts.get('11', 0)) / shots2\n",
    "    yy_contribution = -xx_contribution * zz_contribution\n",
    "    total = 5.9 + .22 * zi_contribution - 6.1 * iz_contribution - 2.14 * xx_contribution - 2.14 * yy_contribution\n",
    "    final_result_simultaneous.append(total)\n",
    "    print(total)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_result_simultaneous=[11.789312,12.531039999999999,13.686624000000002,12.950975999999999,10.417824000000001,10.646688,9.495584,7.283488000000001,5.736288000000002,2.7667200000000007,2.9448640000000004,1.6948800000000006,-0.8939839999999992,-0.5684799999999993,0.03478400000000048,-0.7553599999999996,0.06156800000000029,0.3689600000000004,1.9888,4.571999999999999,3.818656,7.474719999999999,9.504640000000002,9.734688]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "values_theory = [12.191751999999997, 13.15524, 13.462224, 13.381992, 12.837567999999997, 11.637923999999998, 10.217920000000001, 8.380472000000001, 6.38668, 4.4392, 2.5525520000000013, 0.8814480000000007, -0.42213999999999907, -1.3090319999999995, -1.7176839999999993, -1.5886079999999994, -0.9050319999999998, 0.2661680000000004, 1.5365760000000002, 3.4022159999999992, 5.413296000000001, 7.372232, 9.278692, 10.918935999999999]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Superimpose naive vs. simultaneous results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "SMALL_SIZE = 8\n",
    "MEDIUM_SIZE = 10\n",
    "BIGGER_SIZE = 12\n",
    "\n",
    "plt.rc('font', size=12)          # controls default text sizes\n",
    "plt.rc('axes', titlesize=15)     # fontsize of the axes title\n",
    "plt.rc('axes', labelsize=14)    # fontsize of the x and y labels\n",
    "plt.rc('xtick', labelsize=14)    # fontsize of the tick labels\n",
    "plt.rc('ytick', labelsize=14)    # fontsize of the tick labels\n",
    "plt.rc('legend', fontsize=14)    # legend fontsize\n",
    "plt.rc('figure', titlesize=BIGGER_SIZE)  # fontsize of the figure title"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.pyplot import figure\n",
    "import matplotlib\n",
    "figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')\n",
    "plt.plot(theta_values, final_result_naive, 'g^', label = \"Naive\")\n",
    "plt.plot(theta_values, final_result_simultaneous, 'bs', label = \"GC\")\n",
    "plt.plot(theta_values, values_theory, 'k--', label = \"Theory\")\n",
    "plt.legend(loc='best')\n",
    "plt.xlabel('θ (rads)')\n",
    "plt.ylabel('<H>')\n",
    "plt.title('Deuteron <H> estimation, 100 total shots')\n",
    "matplotlib.pyplot.locator_params(axis='y', nbins=6)\n",
    "plt.show()\n",
    "plt.savefig(\"Deuteron_results_100.svg\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Compute and plot the difference from theory (many shots running on simulator)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "values_theory = [12.191751999999997, 13.15524, 13.462224, 13.381992, 12.837567999999997, 11.637923999999998, 10.217920000000001, 8.380472000000001, 6.38668, 4.4392, 2.5525520000000013, 0.8814480000000007, -0.42213999999999907, -1.3090319999999995, -1.7176839999999993, -1.5886079999999994, -0.9050319999999998, 0.2661680000000004, 1.5365760000000002, 3.4022159999999992, 5.413296000000001, 7.372232, 9.278692, 10.918935999999999]\n",
    "value_diff, value2_diff = [], []\n",
    "for theta in range(len(theta_values)):\n",
    "    value_diff.append(abs(final_result_naive[theta] - values_theory[theta]))\n",
    "    value2_diff.append(abs(final_result_simultaneous[theta] - values_theory[theta]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x160 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.pyplot import figure\n",
    "figure(num=None, figsize=(8, 2), dpi=80, facecolor='w', edgecolor='k')\n",
    "plt.plot(theta_values, value_diff, 'g^', label = \"Naive\")\n",
    "plt.plot(theta_values, value2_diff, 'bs', label = \"GC\")\n",
    "plt.xlabel('θ (rads)')\n",
    "plt.ylabel('|Error|')\n",
    "plt.show()\n",
    "plt.savefig(\"Deuteron_error_100.svg\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "13"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(['hi' for v1, v2 in zip(value_diff, value2_diff) if v1 > v2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "22.554807999999994\n"
     ]
    }
   ],
   "source": [
    "print(sum(value_diff))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20.03780799999999\n"
     ]
    }
   ],
   "source": [
    "print(sum(value2_diff))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
